/*
 * @Author: xm https://github.com/xm10086
 * @LastEditors: xm https://github.com/xm10086
 * @FilePath: \justfw-nihao\modules\IMU
 * @Description:  BMI088数据处理,并固定向上发送GYRO[3]与ACCEL[3]数据
 * 
 * */

#ifndef BMI088_JXUST_H
#define BMI088_JXUST_H
#include "BMI088driver.h"
#include "main.h"
//官方在内部集成了传感器温度控制,通过定时器每隔一段时间控制
extern TIM_HandleTypeDef htim10;
#define IMU_temp_PWM(pwm) __HAL_TIM_SET_COMPARE(&htim10, TIM_CHANNEL_1, pwm)

//!参考官方例程数据
#define HTIM10_PERCENTMAX 4999 //pwm占空比最大值

#define TEMPERATURE_PID_KP 8500.0f //温度控制PID的kp
#define TEMPERATURE_PID_KI 0.0f    //ki    //40度对0.4  0.1对35度
#define TEMPERATURE_PID_KD 1000.0f    //kd


/**
 * @brief 初始化BMI088传感器模式,赋予初值,套皮封装
 * 
 */
void bmi088_init_jxust(int flag);

/**
 * @brief 检验BMI088传感器是否正常工作 
 * @todo 还未和任务报错联动
 * 
 */
void bmi088_check_jxust(void);

/**
 * @brief 读取数据并配合应自定义SPI传输更新 (包括偏移值计算)
 * 
 */
void bmi088_read_data_gyro(float gyro[3],float temp[1]);

void bmi088_read_data_accel(float accel[3],float temp[1]);

/**
 * @brief 有两种方案控制温度,一种是任务开始时,跟随校准,等到加热完毕后再确认,而另一种,而是先不计算,等到任务运行到一定时间后,估计比例计算
 */
void BMI088_temp_init(void);

void BMI088_temp_control(float temp);


#endif // !BMI088_JXUST_H